home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacWorld 1999 April
/
Macworld (1999-04).dmg
/
Serious Software
/
GrooveMaker demo
/
GrooveMaker Demo
/
Media
/
Synth.dxr
/
00189_Field_buttare2.txt
< prev
next >
Wrap
Text File
|
1998-07-27
|
31KB
|
746 lines
on keyDown
global gOnSynth, gArp, gPosVolSynth, gPosPanSynth, gProg, gSynthSel, gOn, gTraccia, gPag, gOn, gRandom, gBpmSong, gPath, gWav, gSynthSel
global keyNoteList, folderSynthList, scaleList, synthList, arpList, progList, stateTrackList, volValList, volPosList, virTrackList
if gOn and not(the visible of sprite 76) and (folderSynthList <> []) and not(the visible of window "help") then
case(the keyCode) of
18,19: -- click su 1 (non del tastierino numerico) <-> diminuisce il synth selezionato di 1
-- click su 2 (non del tastierino numerico) <-> aumenta il synth selezionato di 1
put getPos(folderSynthList,field "fieldSynth") into pos
if the keyCode = 19 then
if pos = count(folderSynthList) then
set pos = 1
else
set pos = pos + 1
end if
else
if pos = 1 then
set pos = count(folderSynthList)
else
set pos = pos - 1
end if
end if
put getAt(folderSynthList,pos) into field "fieldSynth"
set the font of member "fieldSynth" to "GMFont"
set the foreColor of member "fieldSynth" to 14
if gOnSynth then IKSynthStop
IKSetSynth gPath & "synth:synth" & gWav & ":" & field "fieldSynth" & ":"
-- calcolo arp
case(getPos(arpList,gArp)) of
1,2,3,4:set arp = integer(chars(gArp,3,length(gArp)))/4
otherwise
set arp = 4
end case
-- vol e pan
IKSynthVolume integer(128*(-gPosVolSynth+54)/45)
IKSynthPan integer(128*(-gPosPanSynth+54)/45)
if synthList <> [] then IKSynthArp getPos(progList,gProg)-1,arp,createSeq()
-- se c'è l'hilite intorno ai marker sparisce
if gSynthSel then
set the locH of sprite 74 to -20
set gSynthSel = 0
end if
20,21: -- click su 3 (non del tastierino numerico) <-> diminuisce l'arp selezionato di 1
-- click su 4 (non del tastierino numerico) <-> aumenta l'arp selezionato di 1
put getPos(arpList,field "fieldArp") into pos
if the keyCode = 21 then
if pos = count(arpList) then
set pos = 1
else
set pos = pos + 1
end if
else
if pos = 1 then
set pos = count(arpList)
else
set pos = pos - 1
end if
end if
put getAt(arpList,pos) into field "fieldArp"
set the font of member "fieldArp" to "GMFont"
set the foreColor of member "fieldArp" to 14
set gArp = field "fieldArp"
case(getPos(arpList,gArp)) of
1,2,3,4:set arp = integer(chars(gArp,3,length(gArp)))/4
otherwise
set arp = 4
end case
-- se la sequenza sta suonando si aggiorna
if gOnSynth then
-- vol e pan
IKSynthVolume integer(128*(-gPosVolSynth+54)/45)
IKSynthPan integer(128*(-gPosPanSynth+54)/45)
IKSynthArp getPos(progList,gProg)-1,arp,createSeq()
end if
-- se c'è l'hilite intorno ai marker sparisce
if gSynthSel then
set the locH of sprite 74 to -20
set gSynthSel = 0
end if
23: -- click su 5 (non del tastierino numerico) <-> aumenta il prog selezionato di 1
put getPos(progList,field "fieldProg") into pos
if pos = count(progList) then
set pos = 1
else
set pos = pos + 1
end if
put getAt(progList,pos) into field "fieldProg"
set the font of member "fieldProg" to "GMFont"
set the foreColor of member "fieldProg" to 14
set gProg = field "fieldProg"
-- se la sequenza sta suonando si aggiorna
-- calcolo arp
case(getPos(arpList,gArp)) of
1,2,3,4:set arp = integer(chars(gArp,3,length(gArp)))/4
otherwise
set arp = 4
end case
if gOnSynth then
-- vol e pan
IKSynthVolume integer(128*(-gPosVolSynth+54)/45)
IKSynthPan integer(128*(-gPosPanSynth+54)/45)
IKSynthArp getPos(progList,gProg)-1,arp,createSeq()
end if
-- se c'è l'hilite intorno ai marker sparisce
if gSynthSel then
set the locH of sprite 74 to -20
set gSynthSel = 0
end if
22: -- click su 6 <-> diminuisce volume
if gOn then
if gPosVolSynth < 54 then
set the locV of sprite 45 = the locV of sprite 45 + 1
set gPosVolSynth = the locV of sprite 45
IKSynthVolume integer(128*(-gPosVolSynth+54)/45)
updateStage
end if
end if
26: -- click su 7 <-> aumenta volume
if gOn then
if gPosVolSynth > 9 then
set the locV of sprite 45 = the locV of sprite 45 - 1
set gPosVolSynth = the locV of sprite 45
IKSynthVolume integer(128*(-gPosVolSynth+54)/45)
updateStage
end if
end if
end case
end if
-- controllo che il tasto premuto sia nella keyNoteList
set tasto = the keyPressed
if not(findPos(keyNoteList,tasto) = 0) then
if gOn and (IKGetCurrentBeat() <> -1) and (folderSynthList <> []) and not(the visible of window "help") then
-- ricavo quale nota è stata scelta
if tasto <> "" then
set nota = getProp(keyNoteList,tasto)
-- ricavo l'ottava
set oct = ((findPos(keyNoteList,tasto)-1)/count(scaleList))+1
set notaOct = nota & oct
set Gnota = "y" & nota
-- non è in play, si accende
if not getPos(synthList,notaOct) then
-- hilite della nota
repeat with i = ((oct-1)*12 + 4) to (((oct-1)*12 + 4)+11)
if the name of member the memberNum of sprite i = nota then
set the memberNum of sprite i to the number of member Gnota
updatestage
exit repeat
end if
end repeat
-- aggiorno la sequenza
append synthList,notaOct
else -- è in play, si spegne
-- tolgo hilite della nota
repeat with i = ((oct-1)*12 + 4) to (((oct-1)*12 + 4)+11)
if the name of member the memberNum of sprite i = Gnota then
set the memberNum of sprite i to the number of member nota
updatestage
exit repeat
end if
end repeat
deleteAt synthList,getPos(synthList,notaOct)
end if
-- se ho tolto l'ultimo nota si spegne il synth
if synthList = [] then
set gOnSynth = 0
IKSynthStop
else
if not gOnSynth then set gOnSynth = 1
-- aggiorno il play
-- calcolo arp
case(getPos(arpList,gArp)) of
1,2,3,4:set arp = integer(chars(gArp,3,length(gArp)))/4
otherwise
set arp = 4
end case
-- vol e pan
IKSynthVolume integer(128*(-gPosVolSynth+54)/45)
IKSynthPan integer(128*(-gPosPanSynth+54)/45)
IKSynthArp getPos(progList,gProg)-1,arp,createSeq()
end if
-- se c'è l'hilite intorno ai marker sparisce
if gSynthSel then
set the locH of sprite 74 to -20
set gSynthSel = 0
end if
end if
end if
else
-- tasti per le schermate principali
tell the stage
put the frame into numFrame
case(numFrame) of
2,3: -- CLICK PER IL GROOVE
case(the keyPressed) of
"a": -- click su mem
-- se c'è un marker con hilite allora non funziona
put chars(the name of member(the memberNum of sprite 12),2,length(the name of member(the memberNum of sprite 12))) into temp
if not integerP(integer(temp)) then
set the memberNum of sprite 13 to the number of member "Hmarker"
set the loc of sprite 13 to point (51,240)
updateStage
--clickMarker
end if
end case
case(the keyCode) of
25,29: -- click su 9 (non del tastierino numerico) <-> diminuisce il bpm di 1
-- click su 0 (non del tastierino numerico) <-> aumenta il bpm di 1
put field "fieldBpm" into bpm
if (the keyCode = 25) and (bpm > (4*gBpmSong/5+1)) then
set bpm = bpm - 1
IKmixBpm bpm
end if
if (the keyCode = 29) and (bpm < (6*gBpmSong/5-1)) then
set bpm = bpm + 1
IKMixBpm bpm
end if
-- aggiorno il campo
put bpm into field"fieldBpm"
set the font of member "fieldBpm" to "GMFont"
set the foreColor of member "fieldBpm" to 54
-- aggiorno il pallino del bpm
set the locH of sprite 24 = 15*25*(bpm-gBpmSong)/gBpmSong+321
set the locV of sprite 24 to 449
updateStage
49: -- click su barra spazio <-> pulsante rosso
puppetSprite 13,true
set the memberNum of sprite 13 to the number of member "Hred"
set the loc of sprite 13 to point (320,240)
updateStage
clickRed
-- + e - ***********************
67: -- click su * <-> aumenta volume
if gTraccia <> 0 then
if getAt(stateTrackList,gTraccia) <> "off" then
if getAt(volPosList,gTraccia)>168 then
setAt volPosList,gTraccia,(getAt(volPosList,gTraccia)-1)
set vol = (128/power(1.022,142))*power(1.022,((-142*the locV of sprite 3)+142+(310*141))/142)+4
if integer(vol) = 124 then set vol = 128
IKVolume gTraccia,integer(vol)
setAt volValList,gTraccia,integer(vol)
-- posiziona il controllo volume
set the locV of sprite 3 to getAt(volPosList,gTraccia)
updateStage
end if
end if
end if
78: -- click su - <-> diminuisce volume
if gTraccia <> 0 then
if getAt(stateTrackList,gTraccia) <> "off" then
if getAt(volPosList,gTraccia)<310 then
setAt volPosList,gTraccia,(getAt(volPosList,gTraccia)+1)
set vol = (128/power(1.022,142))*power(1.022,((-142*the locV of sprite 3)+142+(310*141))/142)-1
if integer(vol) = 5 then set vol = 0
IKVolume gTraccia,integer(vol)
setAt volValList,gTraccia,integer(vol)
-- posiziona il controllo volume
set the locV of sprite 3 to getAt(volPosList,gTraccia)
updateStage
end if
end if
end if
-- *****************************
-- FRECCE **********************
125: -- click sulla freccia down <-> click su un fileAudio
if gTraccia <> 0 then
-- controllo se questa traccia è già impegnata
case(getAt(virTrackList,gTraccia)) of
-1: -- la traccia è libera
set numLine = random(the lineCount of member "fieldAudio")
otherwise -- la traccia è già impegnata
-- se l'ho trovato nell'ultima linea del field vado alla linea 1
if getAt(virTrackList,gTraccia) = the lineCount of member "fieldAudio" then
set numLine = 1
else
set numLine = getAt(virTrackList,gTraccia)
end if
end case
-- se la linea scelta è già impegnata passo alla linea successiva
repeat while getOne(virTrackList,numLine)
set numLine = numLine + 1
if numLine = (the lineCount of member "fieldAudio" + 1) then set numLine = 1
end repeat
clickNameAudio numLine
-- aggiorno la visualizzazione del field "fieldAudio"
put the lineCount of member "fieldAudio" /20 into q
put the lineCount of member "fieldAudio" mod 20 into r
-- abbiamo q+1 pagine se r>0, q se r=0
if r then
set numPag = q+1
else
set numPag = q
end if
if numLine mod 20 = 1 then -- ho cambiato pagina
if gPag = numPag then -- sono già nell'ultima pagina
scrollByLine member "fieldAudio",-20*(numPag-1)
set gPag = 1
else
scrollByLine member "fieldAudio",20
set gPag = gPag + 1
end if
-- se la traccia è già impegnata sono nella pagina giusta altrimenti sono a pagina 1
else
-- calcolo in quale pagina è la numLine
put numLine /20 into q
put numLine mod 20 into r
-- abbiamo q+1 pagine se r>0, q se r=0
if r then
set numPag = q+1
else
set numPag = q
end if
if gPag <> numPag then
scrollByLine member "fieldAudio",20*(numPag-1)
set gPag = numPag
end if
end if
end if
126: -- click sulla freccia up <-> click su un fileAudio
if gTraccia <> 0 then
-- controllo se questa traccia è già impegnata
case(getAt(virTrackList,gTraccia)) of
-1: -- la traccia è libera
set numLine = random(the lineCount of member "fieldAudio")
otherwise -- la traccia è già impegnata
-- se l'ho trovato nella prima linea del field vado all'ultima
if getAt(virTrackList,gTraccia) = 1 then
set numLine = the lineCount of member "fieldAudio"
else
set numLine = getAt(virTrackList,gTraccia)
end if
end case
-- se la linea scelta è già impegnata passo alla linea successiva
repeat while getOne(virTrackList,numLine)
set numLine = numLine - 1
if numLine = 0 then set numLine = the lineCount of member "fieldAudio"
end repeat
clickNameAudio numLine
-- aggiorno la visualizzazione del field "fieldAudio"
put the lineCount of member "fieldAudio" /20 into q
put the lineCount of member "fieldAudio" mod 20 into r
-- abbiamo q+1 pagine se r>0, q se r=0
if r then
set numPag = q+1
else
set numPag = q
end if
-- calcolo in quale pagina è la numLine
put numLine /20 into q
put numLine mod 20 into r
-- abbiamo q+1 pagine se r>0, q se r=0
if r then
set pag = q+1
else
set pag = q
end if
if gPag > pag then
scrollByLine member "fieldAudio",-20*(gPag-pag)
set gPag = pag
else
if gPag < pag then
scrollByLine member "fieldAudio",20*(pag-gPag)
set gPag = pag
end if
end if
end if
124: -- click sulla freccia right <-> click su nextLoop
-- funziona solo se non siamo sull'ultima pagina del field "fieldAudio"
put the lineCount of member "fieldAudio" /20 into q
put the lineCount of member "fieldAudio" mod 20 into r
-- abbiamo q+1 pagine se r>0, q se r=0
if r then
set numPag = q+1
else
set numPag = q
end if
if gPag <> numPag then
scrollByLine member "fieldAudio",20
set gPag = gPag + 1
else
scrollByLine member "fieldAudio",-20*(numPag-1)
set gPag = 1
end if
123: -- click sulla freccia left <-> click su prevLoop
-- funziona solo se non siamo sulla prima pagina del field "fieldAudio"
if gPag <> 1 then
scrollByLine member "fieldAudio",-20
set gPag = gPag - 1
else
-- conto quante pagine abbiamo
put the lineCount of member "fieldAudio" /20 into q
put the lineCount of member "fieldAudio" mod 20 into r
-- abbiamo q+1 pagine se r>0, q se r=0
if r then
set numPag = q+1
else
set numPag = q
end if
scrollByLine member "fieldAudio",20*(numPag-1)
set gPag = numPag
end if
-- *****************************
-- RANDOM **********************
115,116,119,121:
-- click su beginLine (115) <-> perc
-- click su endLine (119) <-> mild
-- click su pageUp (116) <-> inst
-- click su pageDown (121) <-> random
set gTraccia = 0
puppetSprite 12,true
-- posiziona il pulsante del volume e del pan
set the loc of sprite 3 = point(529,239)
set the loc of sprite 4 = point(543,239)
-- si vuota il field "fieldAudio"
repeat with i = 1 to 8
if getAt(virTrackList,i) <> -1 then put "àà" into word 1 of line getAt(virTrackList,i) of field "fieldAudio"
end repeat
scrollByLine member "fieldAudio",-20*(the lineCount of member "fieldAudio"/20)
set gPag = 1
-- aggiorno la tempList
if virTrackList <> [-1,-1,-1,-1,-1,-1,-1,-1] then
repeat with i = 1 to 8
setAt tempList,i,getAt(virTrackList,i)
end repeat
end if
set virTrackList = [-1,-1,-1,-1,-1,-1,-1,-1]
case(the keyCode) of
115:
set gRandom = "perc"
set the memberNum of sprite 12 to the number of member "Hperc"
set the ink of sprite 12 to 36
set the loc of sprite 12 = point(218,17)
116:
set gRandom = "inst"
set the memberNum of sprite 12 to the number of member "Hinst"
set the ink of sprite 12 to 36
set the loc of sprite 12 = point(184,34)
119:
set gRandom = "mild"
set the memberNum of sprite 12 to the number of member "Hmild"
set the ink of sprite 12 to 36
set the loc of sprite 12 = point(128,79)
121:
set gRandom = "rand"
set the memberNum of sprite 12 to the number of member "Hrand"
set the ink of sprite 12 to 36
set the loc of sprite 12 = point(156,55)
end case
updateStage
playRandom
-- *****************************
end case
6,7: -- CLICK PER IL SEQ
case(the keyCode) of
25,29: -- click su 9 (non del tastierino numerico) <-> diminuisce il bpm di 1
-- click su 0 (non del tastierino numerico) <-> aumenta il bpm di 1
put field "fieldBpm" into bpm
if (the keyCode = 25) and (bpm > (4*gBpmSong/5+1)) then
set bpm = bpm - 1
IKmixBpm bpm
end if
if (the keyCode = 29) and (bpm < (6*gBpmSong/5-1)) then
set bpm = bpm + 1
IKMixBpm bpm
end if
-- aggiorno il campo
put bpm into field"fieldBpm"
set the font of member "fieldBpm" to "GMFont"
set the foreColor of member "fieldBpm" to 54
-- aggiorno il pallino del bpm
set the locH of sprite 24 = 15*(100*(bpm-gBpmSong)/gBpmSong+52)/4 + 5
set the locV of sprite 24 to 362
updateStage
49: -- click su barra spazio <-> start/stop
set the memberNum of sprite 36 to the number of member "HredSeq"
set the ink of sprite 36 to 36
updateStage
end case
10,11: -- CLICK PER IL VMIX
case(the keyCode) of
25,29: -- click su 9 (non del tastierino numerico) <-> diminuisce il bpm di 1
-- click su 0 (non del tastierino numerico) <-> aumenta il bpm di 1
put field "fieldBpm" into bpm
if (the keyCode = 25) and (bpm > (4*gBpmSong/5+1)) then
set bpm = bpm - 1
IKmixBpm bpm
end if
if (the keyCode = 29) and (bpm < (6*gBpmSong/5-1)) then
set bpm = bpm + 1
IKMixBpm bpm
end if
-- aggiorno il campo
put bpm into field"fieldBpm"
set the font of member "fieldBpm" to "GMFont"
set the foreColor of member "fieldBpm" to 54
-- aggiorno il pallino del bpm
set the locH of sprite 24 = 15*25*(bpm-gBpmSong)/gBpmSong+321
set the locV of sprite 24 to 341
updateStage
49: -- click su barra spazio <-> start/stop
if IKGetCurrentBeat() <> -1 then
-- si accende l'hilite intorno al pulsante
set the memberNum of sprite 36 to the number of member "HredMix"
end if
end case
end case
end tell
end if
end
-----------------------------------------------------------------------
on keyUp
global gOn,gTraccia,gSolo
global folderSynthList,synthList
if the keyCode = 24 then markSynth -- marca il synth
case(the keyPressed) of
";": -- vuota la tastiera
if gOn and (folderSynthList <> []) and not(the visible of window "help") then
-- se c'è il fieldElencoSynthSalvati aperto si chiude e non prende il click
if the visible of sprite 76 then
pass
else
if synthList <> [] then
emptySynth
end if
end if
end if
":": clickLed
otherwise
-- tasti per le schermate principali
tell the stage
put the frame into numFrame
case(numFrame) of
2,3: -- CLICK PER IL GROOVE
-- the keyPressed : This system property gives the character assigned to the key that was last pressed
case(the keyPressed) of
"a": -- click su m <-> pulsante marker
-- se c'è un marker con hilite allora non funziona
put chars(the name of member(the memberNum of sprite 12),2,length(the name of member(the memberNum of sprite 12))) into temp
if not integerP(integer(temp)) then clickMarker
"q": -- click su q <-> solo
set gSolo = not gSolo
puppetSprite 11,true
clickSolo
"w": -- click su w <-> mute,play
if gTraccia <> 0 and gOn then
-- memorizzo il numero del controlTrack cliccato
set spriteNum = 40 + gTraccia
set traccia = spriteNum - 40
clickControlTrack traccia, spriteNum
end if
end case
-- the keyCode : This keyboard code is the key's numerical value, not the ANSI value
case(the keyCode) of
-- TRACCE **********************
83,84,85,86,87,88,89: -- click su 1..7 <-> traccia 1..traccia 7
set gTraccia = the keyCode - 82
puppetSprite 12,true
if gSolo and getAt(stateTrackList,gTraccia) <> "off" then clickControlTrack gTraccia, 40 + gTraccia
clickTrack
91: -- click su 8 <-> traccia 8
set gTraccia = 8
puppetSprite 12,true
if gSolo and getAt(stateTrackList,8) <> "off" then clickControlTrack 8, 48
clickTrack
-- *****************************
end case
6,7: -- CLICK PER IL SEQ
case(the keyCode) of
49: -- click su barra spazio <-> start/stop
-- if IKGetCurrentBeat() <> -1 then
-- si spegne l'hilite intorno al pulsante
set the memberNum of sprite 36 to the number of member "redButton"
set the ink of sprite 36 to 8
updateStage
-- aggiorno il fieldState
put "" into field "fieldState"
clickRedSeq
-- end if
end case
10,11: -- CLICK PER IL VMIX
case(the keyCode) of
49: -- click su barra spazio <-> start/stop
if IKGetCurrentBeat() <> -1 then
-- si spegne l'hilite intorno al pulsante
set the memberNum of sprite 36 to the number of member "redMix"
updateStage
clickRedMix
end if
end case
end case
end tell
end case
end
****************************************************************
-- funzione che vuota la synthList
on emptySynth
global gSynthSel,gOnSynth
global synthList
set the memberNum of sprite 64 to the number of member "empty"
updateStage
-- se c'è l'hilite intorno ai marker sparisce
if gSynthSel then
set the locH of sprite 74 to -20
set gSynthSel = 0
end if
-- se la nota compare nella synthList si spegne l'hilite del tasto
repeat with i = 1 to 3
set start = 12*(i-1) + 3 -- frame prima dell'inizio di ogni ottava
repeat with j = 1 to 12
if char 1 of the name of member the memberNum of sprite (start+j) = "y" then
set nota = chars(the name of member the memberNum of sprite (start+j),2,length(the name of member the memberNum of sprite (start+j))) & i
if getPos(synthList,nota) then
set nota = chars(nota,1,length(nota)-1)
set the memberNum of sprite (start+j) to the number of member nota
updateStage
end if
end if
end repeat
end repeat
set synthList = []
IKSynthStop
set gOnSynth = 0
end
****************************************************************
-- clikc sul led rosso
on clickLed
global gOn,gArp,gProg,gOnSynth,gPosVolSynth,gPosPanSynth,gSynthSel,gPath,gWav
global synthList,arpList,progList,folderSynthList
if gOn and (IKGetCurrentBeat() <> -1) and (folderSynthList <> []) and not(the visible of window "help") then
-- se c'è il fieldElencoSynthSalvati aperto si chiude e non prende il click
if the visible of sprite 76 then
pass
else
if gOnSynth then
set gOnSynth = 0
IKSynthStop
else
-- è acceso il led rosso, diventa azzurro solo se ci sono delle note selezionate
IKSetSynth gPath & "synth:synth" & gWav & ":" & field "fieldSynth" & ":"
if synthList <> [] then
set the visible of sprite 3 to false
-- aggiorno il play
-- calcolo arp
case(getPos(arpList,gArp)) of
1,2,3,4:set arp = integer(chars(gArp,3,length(gArp)))/4
otherwise
set arp = 4
end case
-- vol e pan
IKSynthVolume integer(128*(-gPosVolSynth+54)/45)
IKSynthPan integer(128*(-gPosPanSynth+54)/45)
IKSynthArp getPos(progList,gProg)-1,arp,createSeq()
set gOnSynth = 1
-- se c'è l'hilite intorno ai marker sparisce
if gSynthSel then
set the locH of sprite 74 to -20
set gSynthSel = 0
end if
end if
end if
end if
end if
end